-- =======================================================
-- ==             Energy Information Service            ==
-- =======================================================
-- 监听来自客户端的请求，并回复 MFSU 的能量状态。
-- 已根据用户反馈进行最终修正。
-- 后台运行 bg fans.lua >> fans.log
-- =======================================================

-- 引入必要的模块
local Component = require("component")
local event = require("event")
local serialization = require("serialization")

-- 获取组件代理
local tunnel = Component.tunnel
local mfsu = Component.ic2_te_mfsu

-- 检查组件是否存在
if not tunnel then error("错误：找不到 P2P 通道 (tunnel) 组件。") end
if not mfsu then error("错误：找不到 MFSU (ic2_te_mfsu) 组件。") end

print("能源服务已启动。等待客户端请求...")

while true do
  -- 等待一个 "modem_message" 事件
  local _, _, from_address, _, _, message = event.pull("modem_message")
  
  if message and message == "request_energy" then
    print("收到来自 " .. from_address .. " 的能源请求")
    
    -- 使用 pcall 安全地调用外部组件方法
    local ok, energy_data = pcall(function()
      return {
        energy = mfsu.getEnergy(),
        capacity = mfsu.getCapacity() -- 【已按要求修正】使用 getCapacity()
      }
    end)
    
    local response
    if ok then
      -- 使用 tostring() 或字符串拼接，避免大数字的格式化错误
      print("回复数据: " .. tostring(energy_data.energy) .. " / " .. tostring(energy_data.capacity) .. " EU")
      response = { success = true, data = energy_data }
    else
      -- pcall 失败，说明调用 mfsu 组件时出错
      print("错误：获取能源数据失败: " .. tostring(energy_data))
      response = { success = false, message = "在服务器端无法获取能源数据。请检查组件函数是否正确。" }
    end
    
    -- 将 response 表序列化后发送回客户端
    tunnel.send(serialization.serialize(response))
  end
end
